package Estats;

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Sound;
import org.newdawn.slick.gui.AbstractComponent;
import org.newdawn.slick.gui.ComponentListener;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.FadeInTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;
import GUI.BotoMenu;
import newMenu.ManagerPerfil;
import newMenu.ManagerRecursos;
//import newMenu.ReproductorMusica;

/**
 * En aquest estat es carreguen els recursos tot mostrant un fons de pantalla i una barra progressiva
 * @author David Alvarez Palau
 */
public class EstatControles extends BasicGameState {

    // Identificador de l'estat
    public static final int ID = 23;
    // Contenidor del joc
    private GameContainer game;
    // Contenidor d'estats que s'usara per accedir als estats necessaris
    private StateBasedGame state;
    // Volum dels efectes
    private int volumEfectes;
    // Volum de la musica
    private int volumMusica;
    // Imatge fons de pantalla
    private Image imatgeFons;
    // Imatge fons de pantalla
    private Image imatgeFonsCat;
    // Imatge fons de pantalla
    private Image imatgeFonsEng;
    // Text del boto tornar
    private Image textTornar;
    // Text del boto tornar CAT
    private Image textTornarCat;
    // Text del boto tornar ENG
    private Image textTornarEng;
    // Boto per tornar al menu principal
    private BotoMenu botoTornar;
    // So del boto quan es clicat
    private Sound soClick;
    // So del boto quan hi ha mouse over
    private Sound soOver;
    //Iidioma perfil
    private int idioma;

    /**
     * BasicGameState ens obliga a implementar aquest metode
     * @return int amb l'ID de l'estat del joc
     */
    public int getID() {
        return ID;
    }

    /**
     * Aqui s'inicialitzen les variables necessaries per al correcte funcionament del estat
     * @param container
     * @param game
     * @throws SlickException
     */
    public void init(GameContainer container, StateBasedGame game)
            throws SlickException {
        this.game = container;
        this.state = game;
        imatgeFons = ManagerRecursos.getImage("fonsContolesEspImage");
        imatgeFonsCat = ManagerRecursos.getImage("fonsContolesCatImage");
        imatgeFonsEng = ManagerRecursos.getImage("fonsContolesEngImage");
        textTornar = ManagerRecursos.getImage("textTornarEspImage");
        textTornarCat = ManagerRecursos.getImage("textTornarCatImage");
        textTornarEng = ManagerRecursos.getImage("textTornarEngImage");
        soClick = ManagerRecursos.getSound("clickSound");
        soOver = ManagerRecursos.getSound("overSound");
    }

    /**
     * El motor s'encarrega de cridar aquest metode, aqui s'actualitzaran dades de variables o objectes
     * que s'estiguin usant en aquest estat
     * @param container
     * @param game
     * @param delta
     * @throws SlickException
     */
    public void update(GameContainer container, StateBasedGame game, int delta)
            throws SlickException {
    }

    /**
     * Aquest metode s'usa per renderitzar o dibuixar en pantalla els elements que es vulguin
     * @param container
     * @param game
     * @param g
     * @throws SlickException
     */
    public void render(GameContainer container, StateBasedGame game, Graphics g)
            throws SlickException {
         if (idioma == 1) {
            imatgeFons.draw(0, 0, container.getWidth(), container.getHeight());
        } else if (idioma == 2) {
            imatgeFonsCat.draw(0, 0, container.getWidth(), container.getHeight());
        } else if (idioma == 3) {
            imatgeFonsEng.draw(0, 0, container.getWidth(), container.getHeight());
        }
        botoTornar.render(container, g);
    }

    /**
     * Es fa un override del metode enter, el qual es crida cada vegada que s'entra a l'estat
     * @param gc : context on es situa l'estat actual
     * @param state : estat actual
     */
    @Override
    public void enter(GameContainer gc, StateBasedGame state) {
        idioma = ManagerPerfil.getIdioma();
        crearBotons();
        volumEfectes = ManagerPerfil.getVolumEfectes();
        volumMusica = ManagerPerfil.getVolumMusica();
    }

    private void crearBotons() {

        botoTornar = new BotoMenu(game, ManagerRecursos.getImage("botoPetitOverImage"), 400, 570);
        botoTornar.setMouseOverImage(ManagerRecursos.getImage("botoPetitImage"));
        if (idioma == 1) {
            botoTornar.setImageText(textTornar);
        } else if (idioma == 2) {
            botoTornar.setImageText(textTornarCat);
        } else if (idioma == 3) {
            botoTornar.setImageText(textTornarEng);
        }
        botoTornar.addListener(new ComponentListener() {

            public void componentActivated(AbstractComponent comp) {
                state.enterState(EstatMenuPrincipal.ID, new FadeOutTransition(), new FadeInTransition());
            }
        });
        botoTornar.setMouseDownSound(soClick);
        botoTornar.setMouseOverSound(soOver);
        botoTornar.setActiu(true);
    }
}

